﻿
using System;

namespace ConsoleDemo.InterfaceSegregation
{
    /// <summary>
    /// 《这个杀手不太冷》
    /// Leon 有其两面性，即实现 IGentleman 又实现 IKiller。
    /// </summary>
    internal class InterfaceDemo3
    {
        public static void Call()
        {
            var Leon = new WarmKiller();
            Leon.Love();
            //Leon.Kill();          // 一个杀手不应该总将 Kill 方法暴露出来。

            var wk = (IKiller)Leon;     // 当我转换为 杀手接口时，就可以调用 Kill 方法
            wk.Kill();
        }
    }

    interface IGentleman
    {
        void Love();
    }

    interface IKiller
    {
        void Kill();
    }

    class WarmKiller : IGentleman, IKiller
    {
        // 一个杀手不应该将 Kill 方法随意暴露出来。 
        //public void Kill()
        //{
        //    Console.WriteLine("Let me kill the enemy ...");
        //}

        public void Love()
        {
            Console.WriteLine("I will love you forever ...");
        }

        // 显示实现，只有当该类型（WarmKiller）实例被 IKiller 类型变量引用时该方法才能被调用
        void IKiller.Kill()
        {
            Console.WriteLine("Let me kill the enemy ...");
        }
    }
}
